/*
 * Copyright (C) 2018 Burak Akguel, Christian Gesse, Fabian Ruhland, Filip Krakowski, Michael Schoettner
 * Heinrich-Heine University
 *
 * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
 * License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any
 * later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>
 */

#include <kernel/Kernel.h>
#include "FloppyMotorControlThread.h"

FloppyMotorControlThread::FloppyMotorControlThread(FloppyDevice &device) : Thread("FloppyMotorControlThread"),
        device(device), timeout(FloppyController::FLOPPY_TIMEOUT), isRunning(true) {

    timeService = Kernel::getService<TimeService>();
}

void FloppyMotorControlThread::run() {
    while(isRunning) {
        if(device.motorState == FloppyController::FLOPPY_MOTOR_WAIT) {
            timeService->msleep(500);
            timeout -= 500;

            if(timeout <= 0) {
                device.controller.killMotor(device);

                timeout = FloppyController::FLOPPY_TIMEOUT;
            }
        }

        yield();
    }
}

void FloppyMotorControlThread::stop() {
    isRunning = false;
}
